import router from './router'
import store from './store'
import { Message, MessageBox } from 'element-ui'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken, setToken } from '@/utils/auth'
import { isRelogin } from '@/utils/request'
import { getTokenNew } from "@/api/manage/asset";
import Cookies from 'js-cookie'

NProgress.configure({ showSpinner: false })

// const whiteList = ['/login', '/register']
// 移除登录和注册白名单
// const whiteList = ['/sso-callback']

router.beforeEach((to, from, next) => {
  NProgress.start()
  console.log(getToken(), 'from:  ', from, 'to:  ', to, 'next:  ', next, '--------------------------');
  // debugger
  // 从 localStorage 获取登录参数（由 main.js 在页面加载时存储）
  let loginParams = null;
  try {
    const paramsStr = localStorage.getItem('byznjcParams');
    if (paramsStr) {
      loginParams = JSON.parse(paramsStr);
    }
  } catch (e) {
    console.warn('解析 localStorage 中的登录参数失败:', e);
    localStorage.removeItem('byznjcParams'); // 清除无效数据
  }
  console.log(loginParams, 'loginParams', getToken(), 'getToken()');
  // 如果存在登录参数，每次都重新获取 token（避免使用已过期的 token）
  if (loginParams && loginParams.data && loginParams.encryption && loginParams.systemCode) {
    // 格式化参数，匹配接口要求的格式
    const data = {
      data: loginParams.data,
      secret: loginParams.encryption,
      sysCode: loginParams.systemCode
    };

    console.log('从 localStorage 获取到的登录参数，重新获取 token：', data);
    getTokenNew(data).then((res) => {
      if (res.errorCode === "000000") {
        store.commit("user/SET_PARENT_MSG", res.data);
        // 系统中用的token
        store.commit("user/SET_TOKEN", res.data.token);
        setToken(res.data.token);

        // 登录成功后，可以选择清除 localStorage 中的参数（避免重复登录）
        // localStorage.removeItem('byznjcParams');

        // token 获取成功，继续访问目标页面
        next()
        NProgress.done()
      } else {
        // 登录失败，继续执行后续逻辑
        Message.error(res.errorMsg || '登录失败，请重新登录');
        // 登录失败时清除无效参数
        localStorage.removeItem('byznjcParams');
        NProgress.done()
        next({ path: '/' })
      }
    }).catch((err) => {
      // 接口调用失败，继续执行后续逻辑
      console.error('获取登录信息失败:', err);
      Message.error('获取登录信息失败，请重新登录');
      // 登录失败时清除无效参数
      localStorage.removeItem('byznjcParams');
      NProgress.done()
      next()
    });
  } else {
    // 其他页面或者没传参
    if (getToken()) {
      next()
    } else {
      MessageBox.alert('登录状态已过期，请重新登录', '系统提示', { type: 'warning' }).then(() => {
        isRelogin.show = false;
        store.dispatch('user/LogOut').then(() => {
          if (process.env.NODE_ENV === 'development') {
            // location.href = '/'
            window.location.href = '/'
          } else {
            // 清除缓存
            try {
              localStorage.clear();
              sessionStorage.clear();
              // 清除所有 cookie
              // 注意：document.cookie 无法获取 cookie 的 path 和 domain 属性
              // 所以需要尝试在不同路径和域名下删除，以确保清除所有可能的 cookie
              const cookies = document.cookie.split(';');
              cookies.forEach(cookie => {
                const eqPos = cookie.indexOf('=');
                const name = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim();
                if (name) {
                  // 尝试清除当前路径的 cookie
                  Cookies.remove(name);
                }
              });
            } catch (e) {
              console.error('清除缓存失败:', e);
            }
          }
        })
      }).catch(() => {
        isRelogin.show = false;
      });
    }
  }
  // if (getToken()) {
  //   next()
  // } else {
  //   const app = router.app
  //   if (app && app.$data && app.$data.isInitialized === false) {
  //     setTimeout(() => {
  //       if (getToken()) {
  //         next()
  //       } else {
  //         // next()
  //         // 这里可以跳转到错误页面
  //       }
  //     }, 2000)
  //   } else {
  //     next()
  //   }
  // }

})

router.afterEach(() => {
  NProgress.done()
})